package br.com.android.financas.repositorio.impl;

import java.sql.SQLException;
import java.util.Collections;
import java.util.Date;
import java.util.List;

import org.joda.time.DateTime;

import android.content.Context;
import br.com.android.financas.model.Despesa;
import br.com.android.financas.model.Recorrente;
import br.com.android.financas.repositorio.RepositorioDespesa;
import br.com.android.financas.repositorio.RepositorioGenerico;
import br.com.android.financas.repositorio.RepositorioRecorrente;

import com.j256.ormlite.stmt.QueryBuilder;

public class RepositorioRecorrenteImpl extends RepositorioGenerico<Recorrente> implements RepositorioRecorrente {

	public RepositorioRecorrenteImpl(Context context) throws SQLException {
		super(context);
	}

	@Override
	public List<Recorrente> listar(Date mes) {
		DateTime m = new DateTime(mes.getTime());

		DateTime ini = m.dayOfMonth().withMinimumValue().withTimeAtStartOfDay();
		DateTime fim = m.dayOfMonth().withMaximumValue().withTimeAtStartOfDay();
		QueryBuilder<Recorrente, Integer> query = getDatabase().queryBuilder();

		try {
			return query.where().between("data", ini.toDate(), fim.toDate()).or().eq("data", ini.toDate()).or().eq("data", fim.toDate()).query();
		} catch (SQLException e) {
			return Collections.emptyList();
		}
	}

	@Override
	public Despesa getDespesaPai(Recorrente recorrente) {

		try {
			RepositorioDespesa repositorioDespesa=new RepositorioDespesaImpl(context);
			List<Despesa> despesas=repositorioDespesa.getRecorrentes(recorrente);

			if(despesas.size()>0){
				if(despesas.get(0).isPai())
					return despesas.get(0);
				else
					return despesas.get(0).getPai();
			}
			return null;

		} catch (SQLException e) {
			return null;
		}

	}
}
